home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib12.dsk
/
TINY TYPER.bas
< prev
Wrap
BASIC Source File
|
2023-02-26
|
7KB
|
153 lines
1 REM ***********************
2 REM * NIBBLE TINY TYPER *
3 REM * BY GLENN TEMAN *
4 REM * COPYRIGHT (C) 1983 *
5 REM * BY MICROSPARC, INC. *
6 REM * LINCOLN, MA. 01773 *
7 REM ***********************
8 GOTO 60000
9 REM .. GETLN
10 REM ..GETLN..
20 B$ = "":S = 1: NORMAL : PRINT "> ";: FOR I = 1 TO 300: GET A$:A = ASC(A$): IF A = 13 THEN 100
30 IF A = 27 THEN S = ABS(S -1): INVERSE : IF S THEN NORMAL
50 IF A = 8 THEN C = LEN(B$): IF C >1 THEN B$ = LEFT$(B$, LEN(B$) -1): PRINT A$;: GOTO 90
60 IF A = 8 THEN B$ = "": PRINT A$;: GOTO 90
70 PRINT A$;:B = 0: IF A >64 AND A <91 THEN B = 1
80 IF A >31 THEN B$ = B$ + CHR$(A +S *32 *B)
90 NEXT
100 CALL -868: PRINT :I$ = B$: NORMAL
110 RETURN
200 REM ..CMDS..
210 GOSUB 10:A$ = LEFT$(I$,1): IF LEN(I$) = 1 OR A$ = "+" OR A$ = "-" OR A$ = ">" THEN GOSUB 300: GOTO 200
220 IF I$ = "" THEN GOSUB 400: GOTO 200
230 LP = LP +1:LL = LL +1: IF L$(LP) = "" THEN L$(LP) = I$: GOSUB 600: GOTO 200
240 GOSUB 550: GOTO 200
300 REM ..INTERP..
310 IF I$ = "." THEN POP : GOTO 2400
315 A = ASC(A$): IF A >96 THEN A$ = CHR$(A -32):I$ = A$
320 FOR I = 1 TO 14: IF A$ = MID$ ("*+=->CEFPSTLK?",I,1) THEN 350
330 NEXT
340 A$ = "SYNTX": GOSUB 800: RETURN
350 ON I GOSUB 700,650,750,650,1100,1200,1050,2250,1000,1150,2000,2150,2350,2600
360 RETURN
400 REM ..EDIT..
405 C$ = CHR$(101) + CHR$(110) + CHR$(100): IF LL <1 THEN RETURN
410 HTAB 5: PRINT "R";: GOSUB 10: IF I$ = "" THEN B$ = L$(LP): GOSUB 500: RETURN
415 L = LEN(I$):N$ = L$(LP): IF I$ = C$ THEN I = LEN(N$) +1: GOTO 450
420 FOR I = 1 TO LEN(N$): IF I$ = MID$ (N$,I,L) THEN 450
430 NEXT
440 A$ = "WHERE?": GOSUB 800: RETURN
450 HTAB 5:J = I: PRINT "W";: GOSUB 10: IF J = 1 THEN L$(LP) = I$ + MID$ (N$,L +1,99):B$ = L$(LP): GOSUB 500: RETURN
460 L$(LP) = MID$ (N$,1,J -1) +I$ + MID$ (N$,J +L,99):B$ = L$(LP): GOSUB 500
470 RETURN
500 REM ..PRNTLN..
505 IF LP = 0 THEN RETURN
510 FOR I = 1 TO LEN(B$):A$ = MID$ (B$,I,1):A = ASC(A$): INVERSE : IF A <65 OR A >90 THEN NORMAL : IF A >96 THEN A$ = CHR$(A -32)
520 PRINT A$;: NEXT : NORMAL : PRINT : RETURN
550 REM ..PUSH DN..
560 FOR I = LL TO LP STEP -1:L$(I +1) = L$(I): NEXT :L$(LP) = I$: GOSUB 600: RETURN
600 REM ..OUT OF ROOM..
610 IF LL <SZ THEN RETURN
620 A$ = "OUT OF SPACE": GOSUB 8700: RETURN
650 REM ..+ OR -..
655 IF I$ = "+" OR I$ = "-" THEN I$ = I$ +"1"
660 I = VAL(I$) +LP: IF I >LL OR I <1 THEN A$ = "RANGE": GOSUB 800: RETURN
670 LP = I:J = 0:B$ = L$(LP): GOSUB 500: RETURN
700 REM ..*..
710 FOR I = LP TO LL:L$(I) = L$(I +1): NEXT :LL = LL -1:LP = LP -1: RETURN
750 REM ..=..
760 A$ = STR$(LP): GOSUB 800: RETURN
800 REM ..ERROR..
810 FLASH : PRINT " <"A$">";: NORMAL : PRINT CHR$(7): FOR I = 1 TO 1000: NEXT : VTAB PEEK(37): HTAB 1: CALL -868: RETURN
850 REM ..GET RANGE..
860 PRINT LEFT$(I$,1)" ";: INPUT "FROM: ";S$: VTAB PEEK(37): HTAB 20: INPUT "TO: ";E$
900 IF S$ = "" THEN S$ = STR$(LP)
910 IF E$ = "" THEN E$ = STR$(LP)
920 IF S$ = "S" THEN S$ = "1"
930 IF E$ = "E" THEN E$ = STR$(LL)
940 S = VAL(S$):E = VAL(E$): IF S >E OR S >LL OR E <1 OR S <1 OR E >LL THEN 960
950 RETURN
960 A$ = "RANGE": GOSUB 800: POP : RETURN
1000 REM ..PRINT..
1010 GOSUB 850: FOR J = S TO E:B$ = L$(J): PRINT J" ";: GOSUB 500: NEXT : RETURN
1050 REM ..ERASE..
1060 GOSUB 850: PRINT "<ERASE "S" TO "E;: INPUT ": ARE YOU SURE? ";A$: IF LFET$(A$,1) = "N" THEN RETURN
1070 A = 0: FOR I = S TO LL -(2 -S +1):A = A +1:L$(I) = L$(E +A): NEXT :LL = LL -(E -S +1): IF LP >LL THEN LP = LL
1080 RETURN
1100 REM ..>..
1105 IF I$ = ">" + CHR$(101) THEN LP = LL: RETURN
1110 J = VAL( MID$ (I$,2,9)): IF J >LL OR J <1 THEN A$ = "RANGE": GOSUB <CTRL-K>800: RETURN
1120 LP = J: RETURN
1150 REM ..SPACE..
1160 A$ = "SPACE LEFT=" + STR$(SZ -LL): GOSUB 800:I = FRE(0): RETURN
1200 REM ..COMPACT..
1210 GOSUB 850: PRINT "<COMPACT "S" TO "E;: INPUT ": ARE YOU SURE? ";A$: IF LEFT$(A$,1) < >"Y" THEN RETURN
1212 INPUT "LINE LENGTH? 70// ";A$:LN = VAL(A$): IF LN >130 OR LN <31 THEN LN = 70
1220 B$ = "":A = S: FOR I = S TO E:A$ = L$(I):A$ = B$ +A$:C = LN -30: IF LEN(A$) <LN -10 THEN B$ = A$ +" ": GOTO 1280
1240 FOR J = LN TO LN -30 STEP -1: IF MID$ (A$,J,1) = " " THEN C = J:J = LN -31
1260 NEXT
1270 B$ = MID$ (A$,C +1,99) +" ":A$ = MID$ (A$,1,C -1):L$(A) = A$:A = A +1
1280 NEXT
1285 IF B$ < >" " THEN L$(A) = LEFT$(B$, LEN(B$) -1):A = A +1
1290 S = A: GOSUB 1070: RETURN
2000 REM ..TYPE..
2010 PRINT "FORMATTED PRINT: ARE YOU ";: INPUT "SURE? ";A$: IF LEFT$(A$,1) = "N" THEN RETURN
2020 C = 0: PRINT D$;"PR#1": PRINT CHR$(9)"80N"
2025 FOR J = 1 TO LL:B$ = L$(J):A = ASC( LEFT$(B$,1))
2030 S = 0: IF A = 39 THEN GOSUB 2500: IF S THEN 2080
2040 PRINT B$
2080 NEXT
2085 IF C THEN C = 0: GOTO 2025
2090 PRINT D$;"PR#0": PRINT "<DONE.>"
2100 RETURN
2150 REM ..LOAD..
2160 INPUT "LOAD FILE: ";A$: PRINT : IF A$ = "" THEN RETURN
2170 PRINT D$;"OPEN";A$
2180 PRINT D$;"READ";A$
2190 C$ = CHR$(13):I$ = "": INPUT LL: FOR I = 1 TO LL: FOR J = 1 TO 200: GET B$: IF B$ = C$ THEN L$(I) = I$:J = 201
2200 I$ = I$ +B$
2210 NEXT :I$ = ""
2220 NEXT
2230 PRINT C$;D$;"CLOSE";A$
2240 LP = 1: RETURN
2250 REM ..FILE..
2260 INPUT "FILE NAME: ";A$: IF A$ = "" THEN RETURN
2270 PRINT D$;"OPEN";A$
2280 PRINT D$;"WRITE";A$
2290 PRINT LL: FOR I = 1 TO LL: PRINT L$(I): NEXT
2300 PRINT D$;"CLOSE";A$
2310 RETURN
2350 REM ..KATALOG..
2360 PRINT : PRINT D$;"CATALOG"
2370 RETURN
2400 REM ..QUIT..
2410 INPUT "QUIT? ";A$: IF LEFT$(A$,1) < >"Y" THEN 200
2420 PRINT : POKE 34,0: HOME : PRINT "<BYE>": PRINT : END
2500 REM ..APOSTROPHE..
2510 A$ = MID$ (B$,2,1): IF A$ = "P" THEN PRINT CHR$(12):S = 1: RETURN
2520 IF A$ = "A" THEN GOSUB 2700:S = 1:J = SZ:C = 1: RETURN
2530 IF A$ = "?" THEN GOSUB 2750: RETURN
2535 IF A$ = "C" THEN S = 1: RETURN
2540 RETURN
2600 REM ..?..
2605 PRINT : INVERSE : PRINT " COMMANDS: ": NORMAL
2610 PRINT "* DELETE CURRENT LINE": PRINT "+N MOVE LP DOWN N LINES"
2620 PRINT "-N MOVE LP UP N LINES": PRINT "= DISPLAY CURRENT LINE #"
2630 PRINT ">N MOVE LP TO LINE N": PRINT "C COMPACT": PRINT "E ERASE": PRINT "F FILE": PRINT "P PRINT"
2640 PRINT "S SPACE LEFT-LINES": PRINT "T TYPE ON PRINTER-SLOT 1"
2650 PRINT "L LOAD": PRINT "K CATALOG": PRINT "? LIST COMMANDS": PRINT ". QUIT"
2660 PRINT : RETURN
2700 REM ..'A..
2710 A$ = MID$ (B$,4,99): GOSUB 2170: RETURN
2750 REM ..'?..
2760 FOR A = 3 TO 10: IF MID$ (B$,A,1) = " " THEN 2780
2770 NEXT
2780 PRINT TAB( VAL( MID$ (B$,3,A -3)));:B$ = MID$ (B$,A +1,199)
2790 RETURN
60000 REM ..INIT..
60010 SZ = 300:LL = 0:LP = 0:D$ = CHR$(4)
60020 DIM L$(SZ)
60030 HOME : PRINT TAB( 8)"** NIBBLE TINY TYPER **"
60035 PRINT
60040 POKE 34,2
60050 GOTO 200